"""
    字符串和数值类型的传参机制
"""


# 定义函数f1
def f1(a):
    print(f"f1()a的值:{a} 地址是:{id(a)}")
    a += 1
    print(f"f1() a的值:{a} 地址是:{id(a)}")


# 首先执行 a = 10 并且输出a变量的地址，然后调用f1函数把a的值传递给f1函数
# f1()函数执行完毕后，a的值还是10，a变量的地址还是10的地址
# 当执行了 a += 1，a的值变成了11，此时 a 的地址就发生了变化，指向了一新的空间

a = 10
print(f"调用f1()前 a的值:{a} 地址是:{id(a)}")
f1(a)
print(f"调用f1()后 a的值:{a} 地址是:{id(a)}")

"""
结论
字符串和数值类型是不可变数据类型，当对应的变量的值发生了变化，他的内存地址也会发生改变
"""
print("---------------------------------")


# 定义函数f2
def f2(name):
    print(f"f2()a的值:{name} 地址是:{id(name)}")
    name += " hi"
    print(f"f2() a的值:{name} 地址是:{id(name)}")


# 字符串也类似 和字符串驻留机制有关系
name = "tom"
print(f"调用f2()前 a的值:{name} 地址是:{id(name)}")
f2(name)
print(f"调用f2()后 a的值:{name} 地址是:{id(name)}")
